package com.welike.shibo.mapper;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.welike.shibo.eneity.LoginUser;
import com.welike.shibo.eneity.User;
import com.welike.shibo.vo.UserInfoListVO;
import com.welike.shibo.vo.page.SearchUserPageVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * Created by fangyu on 2019-08-20.
 */
public interface UserMapper extends BaseMapper<User> {

    // 通过手机号查询用户所有信息
    LoginUser queryAllByPhone(@Param("phone") String phone);

    // 通过手机号和密码比对并且通过查询用户状态查询用户信息
    LoginUser queryAllByPhoneAndPasswordAndStatus(@Param("phone") String phone, @Param("password") String password);

    // 通过手机号查询用户是否存在，即是否已经注册
    boolean queryPhoneByPhone(@Param("phone") String phone);

    int updateDeviceInfoByUid(@Param("deviceId") String deviceId, @Param("deviceType") String deviceType, @Param("uid") String uid);

    /**
     * 通过uid查询用户信息
     *
     * @return UserInfoVo
     */
    LoginUser queryUserInfoByUid(@Param("uid") String uid);

    // 通过手机号查询用户状态
    Integer queryStatusByPhone(@Param("phone") String phone);

    // 通过用户id(uid)查询用户信息
    User queryUserByUid(@Param("uid") String uid);


    // 通过用户id(uid)查询用户昵称
    String queryNickNameByUid(@Param("uid") String uid);

    // 通过用户id(uid)查询用户头像
    String queryAvatarByUid(@Param("uid") String uid);

    // 通过用户id(uid)重新设备号
    String queryDeviceIdByUid(@Param("uid")String uid);

    // 通过用户id(uid)重新设备类型
    String queryDeviceTypeByUid(@Param("uid")String uid);

    // 统计用户总数
    Integer countByUser();

    List<String> queryUid();

    // 后台用户统计
    IPage<UserInfoListVO> queryAllUserInfo(Page page, @Param("key") String key);

    // 查询所有大V用户
    List<String> queryAllVipUser();

    IPage<SearchUserPageVo> searchUser(Page page, @Param("key") String key);

    boolean queryByUid(@Param("uid")String uid);

    String queryUidByPhone(@Param("phone")String phone);


    int updateUser(JSONObject requestJson);

    int updateStatus(JSONObject requestJson);

    int updatePasswordByPhone(@Param("updatedPassword")String updatedPassword,@Param("phone")String phone);

}